import axios from 'axios'
import {MessageBox, Message} from 'element-ui'
import store from '@/store'
import {getToken} from '@/utils/auth'
import {getTimeStamp} from '@/utils/auth'
import router from '@/router'

const TimeOut = 36000 // 定义超时时间

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 10000
})

// 请求拦截器
service.interceptors.request.use(async config => {

    if (store.getters.token) {
      // 只要有token 就要检查token时效性
      if (CheckIsTimeOut()) {
        await store.dispatch('user/logout')
        router.push('/login') // 跳到登录
        return Promise.reject(new Error('您的token已经失效'))
      }
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(response => {

    const {success, message, data} = response.data

    if (success) {
      return data
    } else {
      Message.error(message) // 提示消息
      return Promise.reject(new Error(message))
    }
  },
  error => {
    // error 有response对象 config
    if (error.response && error.response.data && error.response.data.code === 10002) {
      // 后端告诉前端token超时了
      store.dispatch('user/logout') // 调用登出action
      router.push('/login') // 跳到登录页
    }else {
      Message.error(error.message) // 提示错误
    }
    // 失败
    // Message等同于 this.$message

    return Promise.reject(error) // 传入一个错误的对象  就认为promise执行链 进入了catch
  }
)

// 检查token是否过期
function CheckIsTimeOut() {
  return (Date.now() - getTimeStamp()) / 1000 > TimeOut
}

export default service
